// Package transport
// Title  			validation.transport.go
// Description  	验证器传输层
// Author  alittlexincan@163.com  2024/07/22 11:36
// Update  alittlexincan@163.com  2024/07/22 11:36
package transport

import (
	"context"
	"net/http"
	"strconv"

	"xincan.com.cn/tarot-go/internal/app/example/validation/dto"
	"xincan.com.cn/tarot-go/internal/app/example/validation/exception"
	"xincan.com.cn/tarot-go/internal/common/constants"
	"xincan.com.cn/tarot-go/internal/components/middleware"
)

// DecodeSearchValidationObjectRequest
// Title DecodeSearchValidationObjectRequest
// Description 获取传输对象
// Author      		alittlexincan@163.com         			2024/07/22 11:36
// Param			ctx				context.Context			上下文对象
// Param			r				*http.Request			请求对象
// Return			dto.ClusterDto							传输对象
// Return			error									错误信息
func DecodeSearchValidationObjectRequest(_ context.Context, r *http.Request) (interface{}, error) {
	id, _ := strconv.ParseInt(r.FormValue("id"), 10, 64)
	return &dto.SearchValidationDto{
		Id:       id,
		Password: r.FormValue("password"),
	}, nil
}

// DecodeSearchValidationAttributeTransportRequest
// Title DecodeSearchValidationAttributeTransportRequest
// Description 		获取传输对象
// Author      		alittlexincan@163.com         					2024/07/22 11:36
// Update  			alittlexincan@163.com         					2024/07/22 11:36
// Param			ctx						context.Context			上下文对象
// Param			r						*http.Request			请求对象
// Return			dto.ClusterDto									传输对象
// Return			error											错误信息
func DecodeSearchValidationAttributeTransportRequest(ctx context.Context, r *http.Request) (interface{}, error) {
	// 单个验证: 字符串转换为数字
	id, _ := strconv.ParseInt(r.FormValue("id"), 10, 64)
	if err := middleware.ValidationAttribute(ctx, "[Transport]用户ID单值", id, "required,numeric,v-num-len=19"); err != nil {
		return nil, exception.ValidationExceptionBuilder().WithError(constants.ErrInvalidParam, err)
	}
	return id, nil
}

// DecodeSearchValidationAttributeEndpointRequest
// Title DecodeSearchValidationAttributeEndpointRequest
// Description 		获取传输对象
// Author      		alittlexincan@163.com         					2024/07/22 11:36
// Param			ctx						context.Context			上下文对象
// Param			r						*http.Request			请求对象
// Return			dto.ClusterDto									传输对象
// Return			error											错误信息
func DecodeSearchValidationAttributeEndpointRequest(_ context.Context, r *http.Request) (interface{}, error) {
	// 单个验证: 字符串转换为数字
	id, _ := strconv.ParseInt(r.FormValue("id"), 10, 64)
	return id, nil
}

// DecodeSearchValidationAttributeSetObjectEndpointRequest
// Title DecodeSearchValidationAttributeSetObjectEndpointRequest
// Description 		获取传输对象
// Author      		alittlexincan@163.com         					2024/07/22 11:36
// Param			ctx						context.Context			上下文对象
// Param			r						*http.Request			请求对象
// Return			dto.ClusterDto									传输对象
// Return			error											错误信息
func DecodeSearchValidationAttributeSetObjectEndpointRequest(_ context.Context, r *http.Request) (interface{}, error) {
	// 单个验证: 字符串转换为数字
	id, _ := strconv.ParseInt(r.FormValue("id"), 10, 64)
	return &dto.SearchValidationDto{
		Id:       id,
		Password: r.FormValue("password"),
	}, nil
}
